    package com.rj.bd.kj.dc.aes;

    import javax.crypto.*;

    import com.rj.bd.kj.TuoMin;

    import javax.crypto.NoSuchPaddingException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.util.Base64;


    /**
     * @desc : 加密工具类,提供加密和解密的功能
     */
    public class EncryptionUtil {

        /**
         * @desc : 加密方法，根据指定的算法名称和数据返回加密后的字符串
         * @param algorithm
         * @param data
         */
    public static String encrypt(String algorithm, String data) {
        // 获取指定算法名称对应的加密对象
        TuoMin encryption = EncryptionConfig.getEncryption(algorithm);
        // 如果找到了对应的加密对象，则调用其encrypt方法进行加密
        if (encryption != null) {
            return encryption.encrypt(data);
        } else {
            // 如果没有找到对应的加密对象，则抛出运行时异常
            throw new RuntimeException("没有注册这样的加密算法: " + algorithm);
        }
    }


        /**
         * @desc : 解密方法，根据指定的算法名称和加密后的数据返回解密后的字符串
         * @param algorithm
         * @param encryptedData
         * @return
         */
    public static String decrypt(String algorithm, String encryptedData) throws Exception {
        // 从EncryptionConfig中获取指定算法名称对应的加密对象
        TuoMin encryption = EncryptionConfig.getEncryption(algorithm);
        // 如果找到了对应的加密对象，则调用其decrypt方法进行解密
        if (encryption != null) {
            return encryption.decrypt(encryptedData);
        } else {
            // 如果没有找到对应的加密对象，则抛出运行时异常
            throw new RuntimeException("没有注册这样的加密算法: " + algorithm);
        }
    }

        /**
         * @desc : 生成AES密钥,返回Base64编码的密钥字符串
         * @return
         * @throws Exception
         */
        public static String generateAESKey() throws Exception {
            // 生成一个128位的AES密钥
            KeyGenerator keyGen = KeyGenerator.getInstance("AES");
            keyGen.init(128); // 可以使用 128, 192 或 256 位
            SecretKey secretKey = keyGen.generateKey();

            // 将密钥转换为字节数组
            byte[] keyBytes = secretKey.getEncoded();

            // 使用Base64编码将字节数组转换为字符串
            String encodedKey = Base64.getEncoder().encodeToString(keyBytes);

            return encodedKey;
        }

        public static String generateKey() {
            return null;
        }
    }